
import json
from pyecharts.charts import Line
from pyecharts.options import TitleOpts, LabelOpts, LegendOpts
# 处理数据
f_us = open("D:\\file\\美国.txt", "r", encoding="utf-8")
us_data = f_us.read()       # 美国全部内容

f_jp = open("D:\\file\\日本.txt", "r", encoding="utf-8")
jp_data = f_jp.read()       # 日本全部内容

f_in = open("D:\\file\\印度.txt", "r", encoding="utf-8")
in_data = f_in.read()       # 印度全部内容

# 去掉不合规范的JSON开头
us_data = us_data.replace("jsonp_1629344292311_69436(", "")

jp_data = jp_data.replace(jp_data[:jp_data.index("(") + 1], "")

in_data = in_data.replace(in_data[:in_data.index("(") + 1], "")
# 去掉不合规范的JSON结尾
us_data = us_data[:-2]  # 序列切片操作 => 取到倒数第二个字符结束    );

jp_data = jp_data[:-2]

in_data = in_data[:-2]
# JSON转Python字典
us_dict = json.loads(us_data)

jp_dict = json.loads(jp_data)

in_dict = json.loads(in_data)
# print(type(us_dict))
# print(us_dict)
# 获取trend key
us_trend_data = us_dict["data"][0]["trend"]

jp_trend_data = jp_dict["data"][0]["trend"]

in_trend_data = in_dict["data"][0]["trend"]

# print(type(trend))
# print(trend)
# 获取日期数据, 用于x轴, 取2020年(到314下标结束)
us_x_data = us_trend_data["updateDate"][:314]

jp_x_data = jp_trend_data["updateDate"][:314]

in_x_data = in_trend_data["updateDate"][:314]
# print(x_data)
# 获取确认数据, 用于y轴, 到2020年(到315下标结束)
us_y_data = us_trend_data["list"][0]["data"][:314]

jp_y_data = jp_trend_data["list"][0]["data"][:314]

in_y_data = in_trend_data["list"][0]["data"][:314]
# print(y_data)
# 生成图标
line = Line()   # 构建折线图对象
# 添加x轴数据
line.add_xaxis(us_x_data)   # x轴是共用的,用一个国家的数据即可
# 添加y轴数据
line.add_yaxis("美国确证人数", us_y_data, label_opts=LabelOpts(is_show=False))     # 添加美国的y轴人数
line.add_yaxis("日本确证人数", jp_y_data, label_opts=LabelOpts(is_show=False))     # 添加日本的y轴人数
line.add_yaxis("印度确证人数", in_y_data, label_opts=LabelOpts(is_show=False))     # 添加印度的y轴人数

# 设置全局选项
line.set_global_opts(
    # 标题配置
    title_opts=TitleOpts(title="2020年美、日、印确诊人数折线图", pos_left="center", pos_bottom="1%"),
    # 图例配置
    legend_opts=LegendOpts(is_show=True)
)


# 调用render方法,生成图标
line.render()
#  关闭文件对象
f_us.close()
f_jp.close()
f_in.close()
